let queue = [];
let state = {count:0}
function setState(newState){
    queue.push(newState);
}
function handleClick(){
    setState({count:1})
    console.log(state.count)
    setState({count:2,a:'a'})
    console.log(state.count)
    setState({count:6,b:'b'})
    console.log(state.count)
    setState((state)=>({count:state.count+1}))
    console.log(state.count)
}
handleClick();
queue.forEach((newState)=>{
    //其实在状态计算的，对新旧状态对象属性会进行合并操作
    //如果此状态新老都有，则覆盖，如果新的有老的没有，则添加，如果新的没有，老有的，则不变
    //从此角度来说无法真正删除state中的属性，只能把它设置为null值
    //newState不但可以是一个对象，还可能是一个计算函数，可以通过老状态计算新状态
    //判断如果新状态是一个计算函数
    if(typeof newState === 'function'){
        //调用此计算函数，并且传入老状态，计算出新状态
        newState=newState(state);
    }
    //再合并老的和新的状态
    state= {...state,...newState};
});
console.log(state)